package com.github.tetrisgame.base;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.viewbinding.ViewBinding;

import com.github.tetrisgame.R;

/*
  1. Activity的基类（模版）
  2. 重写onCreate方法
  3. 自动提供使用layout id或者viewBinding的形式绑定对应的视图
  4. 使用泛型让用户指定对应的类型
 */
/*
当前这个类是一个泛型类，子类或者创建这个类的对象说时，必须指定这个类里面使用的是什么类型
如果这个类型是任意类型，直接使用一个大写的字母表示即可
如果这个类型还需要约束一下
    1.这个类型是某个类型的子类  T extends ViewBinding
      但凡添加了这个约束，子类或者对象使用时，只能设置指定类型的子类型
    2.这个类型是某个类型的父类  ? super Activity
       但凡添加了这个约束，子类或者对象使用时，只能设置指定类型的父类型
 */
public abstract class BaseActivity<T extends ViewBinding> extends AppCompatActivity {
    public T mBinding;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);

        //获取布局资源id
        int layoutId = initLayoutId();
        if (layoutId != 0) {
            setContentView(layoutId);
        }

        //获取viewBinding对象
        mBinding = initBinding();
        if (mBinding != null){
            setContentView(mBinding.getRoot());
        }

        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        initUI();
    }

    //子类如果需要在onCreate中做操作，只需要重写这个方法即可
    public void initUI(){

    }

    //子类可以选择重写这个方法设置布局资源id
    public int initLayoutId(){
        return 0;
    }

    public T initBinding(){
        return null;
    }
}
